Unix shell,通常被称作“命令行”,为Unix和类Unix操作系统提供了传统的用户界面。用户通过输入shell所执行的命令,引导计算机的操作。在微软Windows操作系统平台,类似程序是command.com,或者基于Windows NT
内核操作系统的cmd.exe。
解释
shell术语最普通的解释就是:用户用来输入命令的任何程序。自从在Unix操作系统中用户能够选择所使用的shell(登录时应当执行哪种程序)以来,许多shell已经被开发出来。之所以被称为“shell”,是因为它隐藏了shell界面下面的操作系统的细节(这与最底层的“kernel”相反)。类似地,Unix图形化用户界面,注入GNOME、KDE和Xfce等,偶尔被称作“可视shell”或“图形shell”。shell术语通常与命令行相关联。在Unix中,任何程序都可能是用户的shell。希望使用不同语法输入命令的用户,可以指定一个不同的程序作为他们的shell。
术语shell也与一个特殊的程序相关,比如Bourne shell,sh。Bourne shell是早期版本Unix所使用的shell,并成为一个事实上的标准;任何类Unix系统至少拥有一个与Bourne shell相兼容的shell。Bourne shell程序位于Unix系统的“/bin/sh”。在某些系统中,比如BSD,“/bin/sh”是一个或等同于Bourne shell,但在Linux等其他系统上,“/bin/sh”更多的是一个兼容的、更加富功能性的shell链接。POSIX将其标准shell制定为Korn shell的一个严格子集。
功能
SHELL的主要功能
一.命令执行
二.输入/输出重定向
三.环境控制
四.后台处理
五.SHELL脚本
命令
关於档案/目录处理的命令
ls——列目录
某一个档案的内容显示出来。
格式:ls -1ACFLRabcdfgilmnopqrstux -W[sv] [files]
例:
#ls (不跟任何参数以简单格式列出当前目录中所有档案)
#ls bin (简单格式列出名为bin的文件或目录下的所有档案)
#ls /u/ilasII_GB/lib (全路径,列出lib目录下的所有档案)
ls 的常用参数如下:
将不会显示出这个档案的名字,我们称此类档案为隐藏档。如.profile、.tcshrc等
如果我们要察看这类档案,则必须在其后加上参数-a 。
-l :这个参数代表使用 ls 的长( long )格式,可以显示更多的资讯,如档案存取权,档案拥有者( owner ),档案归属组,档案大小,档案最後更新时间,甚而symbolic link 的档案是 link 那一个档等等。显示结果如下所示:
drwxrwxrwx 30 root bin 1024 May 23 10:38 u
drwxrwxrwx 2 root sys 512 Jul 28 1999 uacn
drwxrwxrwx 5 root sys 512 Jul 27 1999 udk
lrwxrwxrwx 1 root sys 11 Jul 27 1999 unix -> /stand/unix
drwxrwxrwx 35 root auth 1024 Apr 3 13:45 usr
在开始的10个字符上系统给出文件的用户权限。该序列分成四个域。第一个字符为类型域,第2、3、4个字符为用户主域,第5、6、7个字符为同组用户域,第8、9、10个字符为其它用户域,域中字符的含义如下:
在类型域中: d 表示此文件是一个目录
表示此文件是一个普通文件 b 表示此文件是一个特殊的块设备I/O文件
c 表示此文件是一个特殊的字符设备I/O文件
l 表示此文件是一个连接文件。在其文件名称后紧跟与它连接的文件路径及名称。如:
unix->/stand/unix
在“用户主”、“同组用户”、“其它用户”域中: r 表示有读权限。含义是可以拷贝或显示该文件或目录中的内容。
w 表示有写权限。含义是可以改变或修改该文件。
x 表示有执行权限。含义是可以执行该文件或用cd命令进入该目录,在该目录中建
立文件或子目录等。
表示无权限。 chmod——变更档案模式( change mode )
这个指令是用来更改档案的存取模式( access mode )。在UNIX 一个档案上有可读(r)可写(w)可执行(x)三种模式,分别针对该档案的所有者(onwer )、同组者( group member )( 你可以ls -lg来观看某一档案的所属的 group ),以及其他人(other )。一个档案如果改成可执行模式则系统就将其视为一个可执行档,而一个目录的可执行模式代表使用者有进入该目录之权利。chmod就是用来变更一些档案的模式。
格式:chmod [ -fR ] mode filename ...
主要参数的意义如下:
-f(Force): chmod 不会理会失败的动作。
-R(Recurive): 会将所有子树下的所有子目录及档案改为你所要改成的模式。
Mode:指改变模式。包括三个方面:
为哪些用户改变 u——用户本身
g——同组用户
o——其他用户
如何改变 +——增加权限
-——去掉权限
什么权限 r——读权限
w——写权限
x——执行权限
例:
#chmodg0+w file1
修改前file1的权限为:-rwxr--r--
修改后file1的权限为:-rwxrw-rw-
也可以用一个三位八进位数字来表示对某些对象的存取权。
例:
#chmod666 * (所有用户都可读、写)
#chmod777 * (所有用户都可读、写、执行)
cat——串联显示命令
例:#catfile1 (将文件file1的内容在屏幕上不停地显示出来)
Cat命令还可以用来建立文件,如:
#cat>newfile
this is a text
Ctrl+D
即建立newfile文件,内容为:this is a text
#cat file1 file2>file3 (将file1,file2两个文件接起来生成文件file3)
#cat f1 f2>>f3 (将f1,f2两文件接在f3文件的尾)
more——分屏显示文件内容
more 可以将所观察的档案根据分屏显示出来,并根据使用者的要求换页或卷行。
如果使用者要在某一个档案中搜寻一个特定的字串,则按 / 然後跟著打所要搜寻的单字即可进行搜寻。
如果你在使用中觉得已经看到了所要看的部份,可以按'q'离开 more 的使用。
在使用中按'v' 亦可以使用编辑器来编辑所观看的档案。
格式: more filename
cd——改变当前目录
格式:cddirname
例:
#cd (到用户的“家”目录)
#cd /usr (将目前目录转移到/usr目录,也即进入/usr)
#cd .. (返回上一级目录)
#cd ../.. (返回上一级目录的上一级目录)
cp——拷贝
一个档案或者是将其复制到另一个目录去。
格式:cp [-fip]source_file target_file (拷贝文件)
cp [-r|-R][-fip] source_file...target_file (拷贝目录)
常用参数如下:
-i :此参数是当已有档名为 f2 的档案时,若迳自使用 cp 将会将原来 f2的内容掩盖过去,因此在要盖过之前必须先询问使用者一下。如使用者的回答是y(yes)才执行复制的动作。
-r :此参数是用来做递回复制用,可将一整颗子树都复制到另一个目录中。
cp 的用法例举如下:
#cpf1 f2 (将名为f1 的档案复制一份名为 f2 的档案)
#cpf1 f2 f3 ... dir (将档案f1 f2 f3 ... 复制一份放到目录 dir 里面)
#cp-r dir1 dir2 ( 将dir1 的全部内容全部复制到 dir2 里面)
mv——移动或改名
mv 的意义为 move , 主要是将一档案改名或移至另一个目录。
格式: mv [-fi] source_file... target_file
主要参数:
-i : -i 的含义与 cp 的相同,均是interactive询问之意。
-f: 强迫( force )执行 。所有其他的参数遇到 -f 均失效。
例:
#mvf1 f2 (将名为 f1 的档案变更成名为 f2 的档案)
#mvdir1 dir2 ( 将名为 dir1 的目录变更成名为 dir2 的目录)
#mvf1 f2 f3 ... dir (将档案f1 f2 f3 ... 都移至目录 dir 里面)
rm——删除
rm 的意义是 remove ,也就是用来删除一个档案。在 UNIX 中一个被删除的档案除非是系统恰好有做备份,否则是无法像DOS 里面一样还能够恢复。所以在做 rm 动作的时候使用者应该要特别小心。
格式: rm [-fiRr] file...
主要参数:
-f :将会使得系统在删除时,不提出任何警告讯息。
-i :在除去档案之前均会询问是否真要除去。
-r :递归式的删除。
注意:
例:
rm f1 (删除名为f1的档案)
rm -r dir1 (删除名为dir1的目录及其下的所有档案)
rm-i sendmarc1 (删除名为sendmarc1的文件前先提示,待回答(Y/N)?)如下:
removesendmarc1 ? y
mkdir——创建目录
mkdir 是一个让使用者建立一个目录的指令。你可以在一个目录底下使用
midir建立一个子目录。
格式:mkdir dirname1 [ dirname2 ... ]
例:
#cd/u/ilasII_GB (将当前路径置换为/u/ilasII_GB)
#mkdir ilasbak (在/u/ilasII_GB目录下创建一个名为ilasbak的子目录)
rmdir——删除目录
格式:
rmdirdirname1 [ dirname2 .... ]
如果一个目录底下有其他的档案,rmdir 将无法将这个目录删除,除非使用 rm 指令的 -r选项。
例 :
rmdir ilasbak (删除名为ilasbak的空目录)
pwd——显示当前路径
例如:
#pwd
关于进程处理的命令
ps——显示你的 process或系统 processes 的状况
格式:
ps [-aAdefl] [-G groups] [-o format] [-p pids] [-ttermlist] [-u users] [-U users] [-g pgrplist]
常用参数:
-a 列出所有用户的 process 状况。
-u 显示 user - oriented 的 process 状况 。
-x 显示包括没有 terminal 控制的 process 状况 。
-w 使用较宽的显示模式来显示 process 状况 。
例:
#ps-ae (显示所有进程的进程号及状态)
#ps-u ilasnt1 (显示用户ilasnt1的进程状态)
PID TTY TIME CMD
1194 ttyp0 00:00:00 sh
#ps-t tty1a (显示设备tty1a上的进程)
如上所示:我们可以经由ps 取得目前 processes 的状况,如 PID(进程号) , TTY(设备名)、TIME(时间)、CMD(程序名) 等。
kill——杀进程
kill 指令的用途是送一个信号给某一个进程。因为大部份送的都是用来杀掉进程,因此称为 kill 。
格式:
kill[ -SIGNAL ] pid ...
kill-l
SIGNAL:为一个讯号的数字,从 0 到 31 ,其中 9 是 SIGKILL ,也就是一般用来杀掉一些无法正常终止进程的讯号。
你也可以用kill -l 来察看可代替signal 号码的数目字。
实例
#!/bin/ksh
_compare_2_date()
{
if [ $# -ne 2 ];then
can_archive=false
return 1
fi
can_archive=false
year1=`expr substr $1 1 4`
month1=`expr substr $1 6 2`
day1=`expr substr $1 9 2`
month1=`expr + 0`
year2=`expr substr $2 1 4`
month2=`expr substr $2 6 2`
day2=`expr substr $2 9 2`
month2=`expr + 0`
if [ -lt ];then
can_archive=true
elif [ -eq ];then
if [ -lt ];then
can_archive=true
fi
fi
}
if [ $# -ne 1 ]; then
echo usage: 'log_file_purge.ksh [OFFSET_MONTH]'
exit 1
fi
export OFFSET_MONTH=
export TOTAL_FILE=0
export ARCHIVAL_DIR=/appsdata/archive/logs
export LOG_SUFFIX=abc.log-
exit 1
fi
CURRENT_YEAR=`expr substr 1 4`
CURRENT_MONTH=`expr substr 6 2`
CURRENT_DAY=`expr substr 9 2`
ARCHIVAL_YEAR=
ARCHIVAL_MONTH=
ARCHIVAL_DAY=`expr + 0`
while [ -gt 0 ]
do
ARCHIVAL_MONTH=`expr - 1`
if [ -lt 1 ]; then
ARCHIVAL_YEAR=`expr - 1`
ARCHIVAL_MONTH=`expr + 12`
fi
OFFSET_MONTH=`expr - 1`
done
ls -l /*|grep '^-'|awk '{print $9}'|while read file
do
# echo
FILE_DATE=`expr substr 9 10`
_compare_2_date
rm -f /
if [ $? -eq 0 ]; then
TOTAL_FILE=`expr + 1`
else
exit 1
fi
fi
done
exit 0